#============================================
# FBV与CBV 
# #视图函数既可以是函数也可以是类
# def index ( request) :
# return HttpResponse( ' index' )
# # CBV
# # CBV路由
# url(r'^login/' ,views . MyLogin.as_ view())
# from django.views import View
# class MyLogin(View):
# def get(self, request):[
# return render (request, ' form.html')
# def post ( self , request):
# return HttpResponse( ' post方法' )
# FBV和CBV各有千秋
# CBV特点
# 能够直接根据请求方式的不同直接匹配到对应的方法执行
# 内部到底是怎么实现的?
#============================================
# CBV源码剖析
# #你自己不要修改源码除了bug很难找
# #突破口在urls.py
# url(r'^ login/' , views .MyLogin.as_ view())
# # url(r'^login/' ,views . view)
# FBV一模一样
# CBV与FBV在路由匹配上本质是一样的都是路由对应函数内存地址
# 函数名/方法名加括号执行优先级最高
# 猜测
# as_ view( )
# 要么是被@sta icmethod修饰的静态方法
# 要么是被@classmethod修饰的类方法正确
# @classonlymethod
# def as_ view(cls， **initkwargs) :
# pass

# @classonlymethod
# def as_ view(cls， ** initkwargs) :
# ”””
# cls就是我们自己写的类
# MyCBV
# Main entry point for a request-response process .
# def view( request，*args， **kwargs) :
# self = cls(**initkwargs) # cls是我们自己写的类
# # self = MyLogin(**initkwargs) 产生一个我们自己写的类的对象
# return self. dispatch(request，*args， **kwargs )
# 以后你们会经常需要看源码但是在看python源码的时候一 定要时刻提醒自己面
# 向对象属性方法查找顺序
# 先从对象自己找
# 再去产生对象的类里面找
# 之后再去父类找
# 总结:看源码只要看到了self点一个东西一定要问你自己当前这个self到底是谁
# return view

# # CBV的精髓
# def dispatch(self, request， *args， **kwargs):
# # Try to dispatch to the right method; if a method doesn't
# exist,
# # defer to the error handler. Also defer to the error handler if
# the
# # request method isn't on the approved list.
# #获取当前请求的小写格式 然后比对当前请求方式是否合法
# # get请求为例
# # post请求
# if request . method. lower() in self. http_ method_ names :
# handler = getattr(self, request ●method.lower( )，
# self . http_ method_ not_ allowed)
# 反射:通过字符串来操作对象的属性或者方法
# handler = getattr( 自己写的类产生的对象，'get'，当找不到get属性或者方法的时候就会用第三个参数)
# handler =我们自己写的类里面的get方法
# else:
# handler = self.http_ method_ not_ allowed
# return handler (request, *args， **kwargs)
# 1”
# 自动调用get方法


